package main

import (
	"context"
	"fmt"
)

// 增强函数实现， 闭包 装饰器： 其中核心的处理方法 handleFunc 对应的是装饰器模式中的核心类，Decorate 增强方法对应的则是装饰器类，每次在执行 Decorate 的过程中，都会在 handleFunc 前后增加的一些额外的附属逻辑.
type handleFunc func(ctx context.Context, param map[string]interface{}) error

func Decorate(fn handleFunc) handleFunc {
	return func(ctx context.Context, param map[string]interface{}) error {
		fmt.Println("preprocess...")
		err := fn(ctx, param)
		fmt.Println("postprocess")
		return err
	}
}
